_step = """
RunTestCase、call()：业务解耦和调用方法
    1、用例运行报错解决方案
A文件：A_test.py，只有一个login的step

RunTestCase()和call()使用语法：

1、RunTestCase()是只有在调用A文件的时候，才可以使用（业务解耦、login解耦等）
2、call()：call，调用另一个.py文件的内容。在导入模块时，需要注意，使用别名，不然的话，hrun会识别成两条case

"""

from httprunner import HttpRunner, Config, Step, RunRequest, RunTestCase


class TestCaseCmord(HttpRunner):

    config = Config("testcase description").verify(False)\
        .variables(**{"account":"admin","pwd":"123456"}).base_url("http://60.205.190.66:8899")           # todo：    config 为 全局设置，verify(False)，忽略request证书警告
    # todo: verify- 设置全局变量，前面需要加上**，全局变量，顾名思义，全局都可以使用到的变量
    #  base_url，设置项目地址，全局都会访问到这个地址


    teststeps = [
        Step(
            RunRequest("登录")  # todo:  待测接口命名。只是命名用例
            .post("adminapi/login")  # todo： .post设置请求方式。里面的内容为api的地址。可通过ctrl+鼠标左击，进入方法内
            # todo：httprunner支持：get、post、put、head、delete、options、patch等请求方式
            .with_headers(  # todo：请求接口的headers入参放在这里，在with_headers方法内，需要加上**来读取。
                **{
                    "Host": "139.159.233.129:8899",
                    "Content-Length": "48",
                    "Accept": "application/json, text/plain, */*",
                    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.82 Safari/537.36",
                    "Content-Type": "application/json;charset=UTF-8",
                    "Origin": "http://139.159.233.129:8899",
                    "Referer": "http://139.159.233.129:8899/admin/login",
                    "Accept-Encoding": "gzip, deflate",
                    "Accept-Language": "zh-CN,zh;q=0.9",
                    "Cookie": "think_lang=zh-cn; PHPSESSID=bef660c259ca1b16b852005082b5a394; WS_ADMIN_URL=ws://139.159.233.129:8899/notice; WS_CHAT_URL=ws://139.159.233.129:8899/msg; collapsed=false",
                    "Connection": "keep-alive",
                }
            )
            .with_cookies(  # todo：.with_cookies：设置cookie值  。 请求接口的cookies入参放在这里，在with_cookies方法内，需要加上**来读取。
                **{
                    "think_lang": "zh-cn",
                    "PHPSESSID": "bef660c259ca1b16b852005082b5a394",
                    "WS_ADMIN_URL": "ws://139.159.233.129:8899/notice",
                    "WS_CHAT_URL": "ws://139.159.233.129:8899/msg",
                    "collapsed": "false",
                }
            )
            .with_json({"account": "$account", "pwd": "$pwd", "imgcode": "a"}) # todo： with_json：json参数传参    $account 、 $pwd 引用全局变量account、pwd
            #.with_data() todo:   with_data：data参数传参  引言：指定HTTP请求正文。这对应于的data参数requests.request
            .extract().with_jmespath("body.data.token","token")  # todo：  取出接口的response body返回值 。  这样就可以取到参数了。body是最外层，data处于body的下一级，所以用的是body.data 。第二个参数是命名取到的变量为：data
            .with_jmespath('headers.Server', 'cookies')  # todo：取出接口的response headers返回值
                # todo：  为了确保取值正确，可以run一遍httprunner  。使用命令：  pytest -s ERP_Project_test.py

            .validate()
            .assert_equal("status_code", 200)  # todo：  .validate()：   httprunner内置的断言功能   。  httprunner的断言信息会在转成py文件后，自动生成：断言响应状态码、断言响应body的文本信息等
            .assert_equal('headers."Content-Type"', "application/json; charset=utf-8")
            .assert_equal("body.status", 200)
            .assert_equal("body.msg", "ok")
        )
]

if __name__ == "__main__":
    TestCaseCmord().test_start()